"""
https://leetcode.cn/problems/sort-colors/description/

75. 颜色分类
已解答
中等
相关标签
相关企业
提示
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ，原地 对它们进行排序，使得相同颜色的元素相邻，并按照红色、白色、蓝色顺序排列。

我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

必须在不使用库内置的 sort 函数的情况下解决这个问题。

 

示例 1：

输入：nums = [2,0,2,1,1,0]
输出：[0,0,1,1,2,2]
示例 2：

输入：nums = [2,0,1]
输出：[0,1,2]
 

提示：

n == nums.length
1 <= n <= 300
nums[i] 为 0、1 或 2
 

进阶：

你能想出一个仅使用常数空间的一趟扫描算法吗？

"""

from typing import List


class Solution:
    def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        考虑使用左右指针和swap解决
        """
        left=0
        right=0
        while right<len(nums):
            if nums[right]==0:
                if left!=right:
                    nums[left],nums[right]=nums[right],nums[left]
                left+=1
            right+=1

        left_bd=left
        left=right=len(nums)-1
        while left>=left_bd:
            if nums[left]==2:
                if left!=right:
                    nums[left],nums[right]=nums[right],nums[left]
                right-=1
            left-=1


if __name__=='__main__':
    sol=Solution()
    nums = [2,0,1]
    sol.sortColors(nums)
    print(nums)